home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / acpi / acdisasm.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  14.0 KB  |  446 lines

  1. /******************************************************************************
  2.  *
  3.  * Name: acdisasm.h - AML disassembler
  4.  *
  5.  *****************************************************************************/
  6.  
  7. /*
  8.  * Copyright (C) 2000 - 2008, Intel Corp.
  9.  * All rights reserved.
  10.  *
  11.  * Redistribution and use in source and binary forms, with or without
  12.  * modification, are permitted provided that the following conditions
  13.  * are met:
  14.  * 1. Redistributions of source code must retain the above copyright
  15.  *    notice, this list of conditions, and the following disclaimer,
  16.  *    without modification.
  17.  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
  18.  *    substantially similar to the "NO WARRANTY" disclaimer below
  19.  *    ("Disclaimer") and any redistribution must be conditioned upon
  20.  *    including a substantially similar Disclaimer requirement for further
  21.  *    binary redistribution.
  22.  * 3. Neither the names of the above-listed copyright holders nor the names
  23.  *    of any contributors may be used to endorse or promote products derived
  24.  *    from this software without specific prior written permission.
  25.  *
  26.  * Alternatively, this software may be distributed under the terms of the
  27.  * GNU General Public License ("GPL") version 2 as published by the Free
  28.  * Software Foundation.
  29.  *
  30.  * NO WARRANTY
  31.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  32.  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  33.  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
  34.  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  35.  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  36.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  37.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  38.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
  39.  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
  40.  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  41.  * POSSIBILITY OF SUCH DAMAGES.
  42.  */
  43.  
  44. #ifndef __ACDISASM_H__
  45. #define __ACDISASM_H__
  46.  
  47. #include "amlresrc.h"
  48.  
  49. #define BLOCK_NONE              0
  50. #define BLOCK_PAREN             1
  51. #define BLOCK_BRACE             2
  52. #define BLOCK_COMMA_LIST        4
  53. #define ACPI_DEFAULT_RESNAME    *(u32 *) "__RD"
  54.  
  55. struct acpi_external_list {
  56.     char *path;
  57.     char *internal_path;
  58.     struct acpi_external_list *next;
  59.     u32 value;
  60.     u16 length;
  61.     u8 type;
  62. };
  63.  
  64. extern struct acpi_external_list *acpi_gbl_external_list;
  65.  
  66. typedef const struct acpi_dmtable_info {
  67.     u8 opcode;
  68.     u8 offset;
  69.     char *name;
  70.  
  71. } acpi_dmtable_info;
  72.  
  73. /*
  74.  * Values for Opcode above.
  75.  * Note: 0-7 must not change, used as a flag shift value
  76.  */
  77. #define ACPI_DMT_FLAG0                  0
  78. #define ACPI_DMT_FLAG1                  1
  79. #define ACPI_DMT_FLAG2                  2
  80. #define ACPI_DMT_FLAG3                  3
  81. #define ACPI_DMT_FLAG4                  4
  82. #define ACPI_DMT_FLAG5                  5
  83. #define ACPI_DMT_FLAG6                  6
  84. #define ACPI_DMT_FLAG7                  7
  85. #define ACPI_DMT_FLAGS0                 8
  86. #define ACPI_DMT_FLAGS2                 9
  87. #define ACPI_DMT_UINT8                  10
  88. #define ACPI_DMT_UINT16                 11
  89. #define ACPI_DMT_UINT24                 12
  90. #define ACPI_DMT_UINT32                 13
  91. #define ACPI_DMT_UINT56                 14
  92. #define ACPI_DMT_UINT64                 15
  93. #define ACPI_DMT_STRING                 16
  94. #define ACPI_DMT_NAME4                  17
  95. #define ACPI_DMT_NAME6                  18
  96. #define ACPI_DMT_NAME8                  19
  97. #define ACPI_DMT_CHKSUM                 20
  98. #define ACPI_DMT_SPACEID                21
  99. #define ACPI_DMT_GAS                    22
  100. #define ACPI_DMT_ASF                    23
  101. #define ACPI_DMT_DMAR                   24
  102. #define ACPI_DMT_HEST                   25
  103. #define ACPI_DMT_HESTNTFY               26
  104. #define ACPI_DMT_HESTNTYP               27
  105. #define ACPI_DMT_MADT                   28
  106. #define ACPI_DMT_SRAT                   29
  107. #define ACPI_DMT_EXIT                   30
  108. #define ACPI_DMT_SIG                    31
  109.  
  110. typedef
  111. void (*acpi_dmtable_handler) (struct acpi_table_header * table);
  112.  
  113. struct acpi_dmtable_data {
  114.     char *signature;
  115.     struct acpi_dmtable_info *table_info;
  116.     acpi_dmtable_handler table_handler;
  117.     char *name;
  118. };
  119.  
  120. struct acpi_op_walk_info {
  121.     u32 level;
  122.     u32 last_level;
  123.     u32 count;
  124.     u32 bit_offset;
  125.     u32 flags;
  126.     struct acpi_walk_state *walk_state;
  127. };
  128.  
  129. typedef
  130. acpi_status(*asl_walk_callback) (union acpi_parse_object * op,
  131.                  u32 level, void *context);
  132.  
  133. struct acpi_resource_tag {
  134.     u32 bit_index;
  135.     char *tag;
  136. };
  137.  
  138. /* Strings used for decoding flags to ASL keywords */
  139.  
  140. extern const char *acpi_gbl_word_decode[];
  141. extern const char *acpi_gbl_irq_decode[];
  142. extern const char *acpi_gbl_lock_rule[];
  143. extern const char *acpi_gbl_access_types[];
  144. extern const char *acpi_gbl_update_rules[];
  145. extern const char *acpi_gbl_match_ops[];
  146.  
  147. extern struct acpi_dmtable_info acpi_dm_table_info_asf0[];
  148. extern struct acpi_dmtable_info acpi_dm_table_info_asf1[];
  149. extern struct acpi_dmtable_info acpi_dm_table_info_asf1a[];
  150. extern struct acpi_dmtable_info acpi_dm_table_info_asf2[];
  151. extern struct acpi_dmtable_info acpi_dm_table_info_asf2a[];
  152. extern struct acpi_dmtable_info acpi_dm_table_info_asf3[];
  153. extern struct acpi_dmtable_info acpi_dm_table_info_asf4[];
  154. extern struct acpi_dmtable_info acpi_dm_table_info_asf_hdr[];
  155. extern struct acpi_dmtable_info acpi_dm_table_info_boot[];
  156. extern struct acpi_dmtable_info acpi_dm_table_info_bert[];
  157. extern struct acpi_dmtable_info acpi_dm_table_info_cpep[];
  158. extern struct acpi_dmtable_info acpi_dm_table_info_cpep0[];
  159. extern struct acpi_dmtable_info acpi_dm_table_info_dbgp[];
  160. extern struct acpi_dmtable_info acpi_dm_table_info_dmar[];
  161. extern struct acpi_dmtable_info acpi_dm_table_info_dmar_hdr[];
  162. extern struct acpi_dmtable_info acpi_dm_table_info_dmar_scope[];
  163. extern struct acpi_dmtable_info acpi_dm_table_info_dmar0[];
  164. extern struct acpi_dmtable_info acpi_dm_table_info_dmar1[];
  165. extern struct acpi_dmtable_info acpi_dm_table_info_dmar2[];
  166. extern struct acpi_dmtable_info acpi_dm_table_info_ecdt[];
  167. extern struct acpi_dmtable_info acpi_dm_table_info_einj[];
  168. extern struct acpi_dmtable_info acpi_dm_table_info_einj0[];
  169. extern struct acpi_dmtable_info acpi_dm_table_info_erst[];
  170. extern struct acpi_dmtable_info acpi_dm_table_info_facs[];
  171. extern struct acpi_dmtable_info acpi_dm_table_info_fadt1[];
  172. extern struct acpi_dmtable_info acpi_dm_table_info_fadt2[];
  173. extern struct acpi_dmtable_info acpi_dm_table_info_gas[];
  174. extern struct acpi_dmtable_info acpi_dm_table_info_header[];
  175. extern struct acpi_dmtable_info acpi_dm_table_info_hest[];
  176. extern struct acpi_dmtable_info acpi_dm_table_info_hest9[];
  177. extern struct acpi_dmtable_info acpi_dm_table_info_hest_notify[];
  178. extern struct acpi_dmtable_info acpi_dm_table_info_hpet[];
  179. extern struct acpi_dmtable_info acpi_dm_table_info_madt[];
  180. extern struct acpi_dmtable_info acpi_dm_table_info_madt0[];
  181. extern struct acpi_dmtable_info acpi_dm_table_info_madt1[];
  182. extern struct acpi_dmtable_info acpi_dm_table_info_madt2[];
  183. extern struct acpi_dmtable_info acpi_dm_table_info_madt3[];
  184. extern struct acpi_dmtable_info acpi_dm_table_info_madt4[];
  185. extern struct acpi_dmtable_info acpi_dm_table_info_madt5[];
  186. extern struct acpi_dmtable_info acpi_dm_table_info_madt6[];
  187. extern struct acpi_dmtable_info acpi_dm_table_info_madt7[];
  188. extern struct acpi_dmtable_info acpi_dm_table_info_madt8[];
  189. extern struct acpi_dmtable_info acpi_dm_table_info_madt9[];
  190. extern struct acpi_dmtable_info acpi_dm_table_info_madt10[];
  191. extern struct acpi_dmtable_info acpi_dm_table_info_madt_hdr[];
  192. extern struct acpi_dmtable_info acpi_dm_table_info_mcfg[];
  193. extern struct acpi_dmtable_info acpi_dm_table_info_mcfg0[];
  194. extern struct acpi_dmtable_info acpi_dm_table_info_rsdp1[];
  195. extern struct acpi_dmtable_info acpi_dm_table_info_rsdp2[];
  196. extern struct acpi_dmtable_info acpi_dm_table_info_sbst[];
  197. extern struct acpi_dmtable_info acpi_dm_table_info_slic[];
  198. extern struct acpi_dmtable_info acpi_dm_table_info_slit[];
  199. extern struct acpi_dmtable_info acpi_dm_table_info_spcr[];
  200. extern struct acpi_dmtable_info acpi_dm_table_info_spmi[];
  201. extern struct acpi_dmtable_info acpi_dm_table_info_srat[];
  202. extern struct acpi_dmtable_info acpi_dm_table_info_srat_hdr[];
  203. extern struct acpi_dmtable_info acpi_dm_table_info_srat0[];
  204. extern struct acpi_dmtable_info acpi_dm_table_info_srat1[];
  205. extern struct acpi_dmtable_info acpi_dm_table_info_srat2[];
  206. extern struct acpi_dmtable_info acpi_dm_table_info_tcpa[];
  207. extern struct acpi_dmtable_info acpi_dm_table_info_wdrt[];
  208.  
  209. /*
  210.  * dmtable
  211.  */
  212. void acpi_dm_dump_data_table(struct acpi_table_header *table);
  213.  
  214. acpi_status
  215. acpi_dm_dump_table(u32 table_length,
  216.            u32 table_offset,
  217.            void *table,
  218.            u32 sub_table_length, struct acpi_dmtable_info *info);
  219.  
  220. void acpi_dm_line_header(u32 offset, u32 byte_length, char *name);
  221.  
  222. void acpi_dm_line_header2(u32 offset, u32 byte_length, char *name, u32 value);
  223.  
  224. /*
  225.  * dmtbdump
  226.  */
  227. void acpi_dm_dump_asf(struct acpi_table_header *table);
  228.  
  229. void acpi_dm_dump_cpep(struct acpi_table_header *table);
  230.  
  231. void acpi_dm_dump_dmar(struct acpi_table_header *table);
  232.  
  233. void acpi_dm_dump_einj(struct acpi_table_header *table);
  234.  
  235. void acpi_dm_dump_erst(struct acpi_table_header *table);
  236.  
  237. void acpi_dm_dump_fadt(struct acpi_table_header *table);
  238.  
  239. void acpi_dm_dump_hest(struct acpi_table_header *table);
  240.  
  241. void acpi_dm_dump_mcfg(struct acpi_table_header *table);
  242.  
  243. void acpi_dm_dump_madt(struct acpi_table_header *table);
  244.  
  245. u32 acpi_dm_dump_rsdp(struct acpi_table_header *table);
  246.  
  247. void acpi_dm_dump_rsdt(struct acpi_table_header *table);
  248.  
  249. void acpi_dm_dump_slit(struct acpi_table_header *table);
  250.  
  251. void acpi_dm_dump_srat(struct acpi_table_header *table);
  252.  
  253. void acpi_dm_dump_xsdt(struct acpi_table_header *table);
  254.  
  255. /*
  256.  * dmwalk
  257.  */
  258. void
  259. acpi_dm_disassemble(struct acpi_walk_state *walk_state,
  260.             union acpi_parse_object *origin, u32 num_opcodes);
  261.  
  262. void
  263. acpi_dm_walk_parse_tree(union acpi_parse_object *op,
  264.             asl_walk_callback descending_callback,
  265.             asl_walk_callback ascending_callback, void *context);
  266.  
  267. /*
  268.  * dmopcode
  269.  */
  270. void
  271. acpi_dm_disassemble_one_op(struct acpi_walk_state *walk_state,
  272.                struct acpi_op_walk_info *info,
  273.                union acpi_parse_object *op);
  274.  
  275. void acpi_dm_decode_internal_object(union acpi_operand_object *obj_desc);
  276.  
  277. u32 acpi_dm_list_type(union acpi_parse_object *op);
  278.  
  279. void acpi_dm_method_flags(union acpi_parse_object *op);
  280.  
  281. void acpi_dm_field_flags(union acpi_parse_object *op);
  282.  
  283. void acpi_dm_address_space(u8 space_id);
  284.  
  285. void acpi_dm_region_flags(union acpi_parse_object *op);
  286.  
  287. void acpi_dm_match_op(union acpi_parse_object *op);
  288.  
  289. u8 acpi_dm_comma_if_list_member(union acpi_parse_object *op);
  290.  
  291. void acpi_dm_comma_if_field_member(union acpi_parse_object *op);
  292.  
  293. /*
  294.  * dmnames
  295.  */
  296. u32 acpi_dm_dump_name(char *name);
  297.  
  298. acpi_status
  299. acpi_ps_display_object_pathname(struct acpi_walk_state *walk_state,
  300.                 union acpi_parse_object *op);
  301.  
  302. void acpi_dm_namestring(char *name);
  303.  
  304. /*
  305.  * dmobject
  306.  */
  307. void
  308. acpi_dm_display_internal_object(union acpi_operand_object *obj_desc,
  309.                 struct acpi_walk_state *walk_state);
  310.  
  311. void acpi_dm_display_arguments(struct acpi_walk_state *walk_state);
  312.  
  313. void acpi_dm_display_locals(struct acpi_walk_state *walk_state);
  314.  
  315. void
  316. acpi_dm_dump_method_info(acpi_status status,
  317.              struct acpi_walk_state *walk_state,
  318.              union acpi_parse_object *op);
  319.  
  320. /*
  321.  * dmbuffer
  322.  */
  323. void acpi_dm_disasm_byte_list(u32 level, u8 * byte_data, u32 byte_count);
  324.  
  325. void
  326. acpi_dm_byte_list(struct acpi_op_walk_info *info, union acpi_parse_object *op);
  327.  
  328. void acpi_dm_is_eisa_id(union acpi_parse_object *op);
  329.  
  330. void acpi_dm_eisa_id(u32 encoded_id);
  331.  
  332. u8 acpi_dm_is_unicode_buffer(union acpi_parse_object *op);
  333.  
  334. u8 acpi_dm_is_string_buffer(union acpi_parse_object *op);
  335.  
  336. /*
  337.  * dmresrc
  338.  */
  339. void acpi_dm_dump_integer8(u8 value, char *name);
  340.  
  341. void acpi_dm_dump_integer16(u16 value, char *name);
  342.  
  343. void acpi_dm_dump_integer32(u32 value, char *name);
  344.  
  345. void acpi_dm_dump_integer64(u64 value, char *name);
  346.  
  347. void
  348. acpi_dm_resource_template(struct acpi_op_walk_info *info,
  349.               union acpi_parse_object *op,
  350.               u8 * byte_data, u32 byte_count);
  351.  
  352. acpi_status acpi_dm_is_resource_template(union acpi_parse_object *op);
  353.  
  354. void acpi_dm_indent(u32 level);
  355.  
  356. void acpi_dm_bit_list(u16 mask);
  357.  
  358. void acpi_dm_decode_attribute(u8 attribute);
  359.  
  360. void acpi_dm_descriptor_name(void);
  361.  
  362. /*
  363.  * dmresrcl
  364.  */
  365. void
  366. acpi_dm_word_descriptor(union aml_resource *resource, u32 length, u32 level);
  367.  
  368. void
  369. acpi_dm_dword_descriptor(union aml_resource *resource, u32 length, u32 level);
  370.  
  371. void
  372. acpi_dm_extended_descriptor(union aml_resource *resource,
  373.                 u32 length, u32 level);
  374.  
  375. void
  376. acpi_dm_qword_descriptor(union aml_resource *resource, u32 length, u32 level);
  377.  
  378. void
  379. acpi_dm_memory24_descriptor(union aml_resource *resource,
  380.                 u32 length, u32 level);
  381.  
  382. void
  383. acpi_dm_memory32_descriptor(union aml_resource *resource,
  384.                 u32 length, u32 level);
  385.  
  386. void
  387. acpi_dm_fixed_memory32_descriptor(union aml_resource *resource,
  388.                   u32 length, u32 level);
  389.  
  390. void
  391. acpi_dm_generic_register_descriptor(union aml_resource *resource,
  392.                     u32 length, u32 level);
  393.  
  394. void
  395. acpi_dm_interrupt_descriptor(union aml_resource *resource,
  396.                  u32 length, u32 level);
  397.  
  398. void
  399. acpi_dm_vendor_large_descriptor(union aml_resource *resource,
  400.                 u32 length, u32 level);
  401.  
  402. void acpi_dm_vendor_common(char *name, u8 * byte_data, u32 length, u32 level);
  403.  
  404. /*
  405.  * dmresrcs
  406.  */
  407. void
  408. acpi_dm_irq_descriptor(union aml_resource *resource, u32 length, u32 level);
  409.  
  410. void
  411. acpi_dm_dma_descriptor(union aml_resource *resource, u32 length, u32 level);
  412.  
  413. void acpi_dm_io_descriptor(union aml_resource *resource, u32 length, u32 level);
  414.  
  415. void
  416. acpi_dm_fixed_io_descriptor(union aml_resource *resource,
  417.                 u32 length, u32 level);
  418.  
  419. void
  420. acpi_dm_start_dependent_descriptor(union aml_resource *resource,
  421.                    u32 length, u32 level);
  422.  
  423. void
  424. acpi_dm_end_dependent_descriptor(union aml_resource *resource,
  425.                  u32 length, u32 level);
  426.  
  427. void
  428. acpi_dm_vendor_small_descriptor(union aml_resource *resource,
  429.                 u32 length, u32 level);
  430.  
  431. /*
  432.  * dmutils
  433.  */
  434. void acpi_dm_add_to_external_list(char *path, u8 type, u32 value);
  435.  
  436. /*
  437.  * dmrestag
  438.  */
  439. void acpi_dm_find_resources(union acpi_parse_object *root);
  440.  
  441. void
  442. acpi_dm_check_resource_reference(union acpi_parse_object *op,
  443.                  struct acpi_walk_state *walk_state);
  444.  
  445. #endif                /* __ACDISASM_H__ */
  446.